﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Sinacor.Infra.Core.Licensing
{
    public class Common
    {
        #region Campos
            private MaskedTextBox _maskedtextbox;
            private string _strongCode;

            public string StrongCode
            {
                get { return _strongCode; }
                set { _strongCode = value; }
            }
        #endregion

        #region Construtor

        public Common()
        {
            _maskedtextbox = new MaskedTextBox();
            _strongCode = "@$s%";
        }

        #endregion

        #region Métodos
        public string FormatarCNPJ(string _cnpj)
        {
            _maskedtextbox.Mask = "00.000.000/0000-00";
            _maskedtextbox.Text = _cnpj;

            return _maskedtextbox.Text;
        }

        public string DesformatarCNPJ(string _cnpj)
        {
            _maskedtextbox.Mask = "00.000.000/0000-00";
            _maskedtextbox.Text = _cnpj;
            _maskedtextbox.Mask = "";

            return _maskedtextbox.Text;
        }

        public bool ValidarCNPJ(string cnpj)
        {
            int[] Multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] Multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int Soma;
            int Resto;
            string Digito;
            string TempCNPJ;

            cnpj = cnpj.Trim();
            cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");

            if (cnpj.Length != 14)
                return false;

            TempCNPJ = cnpj.Substring(0, 12);

            Soma = 0;
            for (int i = 0; i < 12; i++)
            {
                Soma += int.Parse(TempCNPJ[i].ToString()) * Multiplicador1[i];
            }

            Resto = (Soma % 11);
            if (Resto < 2)
                Resto = 0;
            else
                Resto = 11 - Resto;

            Digito = Resto.ToString();

            TempCNPJ = TempCNPJ + Digito;
            Soma = 0;
            for (int i = 0; i < 13; i++)
            {
                Soma += int.Parse(TempCNPJ[i].ToString()) * Multiplicador2[i];
            }

            Resto = (Soma % 11);
            if (Resto < 2)
                Resto = 0;
            else
                Resto = 11 - Resto;

            Digito = Digito + Resto.ToString();

            return cnpj.EndsWith(Digito);
        }

        public string ValorControle(MaskedTextBox _maskedtextbox)
        {
            MaskedTextBox maskedtextbox = new MaskedTextBox();
            maskedtextbox.Mask = _maskedtextbox.Mask;
            maskedtextbox.Text = _maskedtextbox.Text;
            maskedtextbox.Mask = "";

            return maskedtextbox.Text;
        }
        #endregion        
    }
}
